# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time

  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery # :secret => '4580787bca684cba1f7061b02dd3fba3'
  
  # See ActionController::Base for details 
  # Uncomment this to filter the contents of submitted sensitive data parameters
  # from your application log (in this case, all fields with names like "password"). 
  # filter_parameter_logging :password
  before_filter :authenticate
  
    protected
  def authenticate
   unless session[:usuario]
     session[:return_to] = request.request_uri
     redirect_to :controller => "login", :action =>"login"
     return false
   end
   return false
  end


  
  #nome: string que representa o nome da Tag a ser recuperada
  #retorno: uma nova Tag caso n�o exista no banco, uma Tag do banco caso exista ou nil
  #caso a string passada por par�metro seja vazia
  def getTag(nome)
    (Tag.find_by_nome(nome) || Tag.new(:nome => nome)) unless nome.to_s == ""
  end
  
  #Esse m�todo � respons�vel por adicionar a nova tag caso ela n�o exista, remover a tag antiga
  #e adicionar outra tag com o nome modificado caso seus nomes sejam diferentes, ignorar a modifica��o
  #caso j� exista uma tag com o mesmo nome modificado ou simplesmente remover a tag caso
  #o nome modificado seja uma string vazia.
  #
  #tag_holder: qualquer objeto que contenha uma cole��o de tags e m�todos "add_tag" e remove_tag".
  #old_tag: a tag antiga, ou seja, antes da chamada do update no controlador.
  #new_tag_name: o novo nome da tag, recuperado da view pelo controlador.
  #retorno: a nova tag ou nil
  def edit_tag_in_holder(tag_holder, old_tag, new_tag_name)
  
    if old_tag && new_tag_name == ""    
      tag_holder.remove_tag(old_tag)
      
    elsif !(new_tag_name == "")
        
      new_tag = getTag(new_tag_name)
      
      if !tag_holder.tags.member?(new_tag)
      
        if old_tag       
          tag_holder.remove_tag(old_tag)
        end        
        tag_holder.add_tag(new_tag)
        old_tag = new_tag
        return new_tag
      end  #end of: !tag_holder.tags.member?(new_tag)  

    end #end of: if, elsif

  end# end of: edit_tag_in_holder
  

end
